home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 6 / CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso / imagine / extras / tools / iiutilities / showstage < prev    next >
Text File  |  1995-01-18  |  4KB  |  137 lines

  1. /*\
  2.  *  This ARexx script will parse an Imagine staging file and list every
  3.  *  object and brush that is accessed in it.  It then displays the total
  4.  *  number of points, objects and faces as well as total pixels in the
  5.  *  bitmaps loaded for the included objects.
  6.  *
  7.  *  Usage: ShowStage [Frame]
  8.  *
  9.  *    Frame is the frame number you want stats on.  If you leave it
  10.  *    off it will read every object in your scene.
  11.  *
  12.  *  NOTE: You need to change the first line to point to the directory
  13.  *        that Imagine is in.  This is needed so this script knows
  14.  *        where to look for objects and brushes when not saved as
  15.  *        absolute directory names.
  16.  *
  17.  *  V1.3 (Jan-19-95)
  18.  *  IanSmith@moose.erie.net
  19. \*/
  20.  
  21. Path="Imagine:"              /* Path for Imagine, change if needed! */
  22.  
  23. Parse Arg FileName FrameNum
  24. If FrameNum="" Then
  25.  FrameNum=-1
  26. LineBuffer=""
  27. Count.Faces=0
  28. Count.TotalFaces=0
  29. Count.Edges=0
  30. Count.Points=0
  31. Count.Pixels=0
  32.  
  33. Call Open(In,FileName,"R") ParseStaging(C2D(SubStr(ReadCH(In,12),5,4)))
  34. Say "Totals: Points="Count.Points "Edges="Count.Edges "Faces="Count.TotalFaces
  35. Say "        Pixels="Count.Pixels "("Count.Pixels*3/1024%1"k)"
  36.  
  37. Exit
  38.  
  39. ParseStaging: PROCEDURE EXPOSE Path Count. LineBuffer FrameNum
  40.  Parse Arg MaxSize
  41.  TotalSize=4
  42.  Do Until TotalSize>=MaxSize
  43.   LineBuffer=""
  44.   Count.Faces=0
  45.   Name=ReadCH(In,4)
  46.   Size=C2D(ReadCH(In,4))
  47.   If Size//2=1 Then Size=Size+1                /* Add pad byte if needed */
  48.   If Name="ISTG" | Name="SOBJ" Then Do
  49.    TotalSize=TotalSize+ParseStaging(Size)+8    /* Parse into these hunks */
  50.    Iterate
  51.   End
  52.   TotalSize=TotalSize+Size+8
  53.   If Name="FIL3" Then Do
  54.    Data=ReadCH(In, 41)
  55.    StartF=C2D(SubStr(Data,3,2))
  56.    EndF=C2D(SubStr(Data,5,2))
  57.    ObjectPath=ReadCH(In,Size-41)
  58.    If (StartF<=FrameNum & EndF>=FrameNum) | FrameNum=-1 Then Do
  59.     OldObjectPath=ObjectPath
  60.     If Index(ObjectPath,":")=0 Then
  61.      ObjectPath=Path||ObjectPath
  62.     FaceCount="Missing"
  63.     If Open(ObjIn,ObjectPath,"R")=1 Then Do
  64.      ParseObject(C2D(SubStr(ReadCH(ObjIn,12),5,4)))
  65.      FaceCount=Count.Faces "faces"
  66.      Call Close(ObjIn)
  67.     End
  68.     Say Strip(OldObjectPath||" ("FaceCount")"||'0A'x||LineBuffer,"B",'0A'x) StartF"-"EndF
  69.     Count.TotalFaces=Count.TotalFaces+Count.Faces
  70.    End
  71.   End; Else
  72.    Call Seek(In,Size,"C")
  73.  End
  74. Return TotalSize
  75.  
  76. ParseObject: PROCEDURE EXPOSE Path Count. LineBuffer
  77.  Parse Arg MaxSize Parent
  78.  TotalSize=4
  79.  Do Until TotalSize>=MaxSize
  80.   Name=ReadCH(ObjIn,4)
  81.   Size=C2D(ReadCH(ObjIn,4))
  82.   If Size//2=1 Then Size=Size+1                /* Add pad byte if needed */
  83.   If  Name="OBJ " | Name="DESC" | Name="TOBJ" Then Do
  84.    TotalSize=TotalSize+ParseObject(Size)+8     /* Parse into these hunks */
  85.    Iterate
  86.   End
  87.   TotalSize=TotalSize+Size+8
  88.  
  89.    If Name="FACE" Then Do                            /* Add Faces, Edges, */
  90.     Count.Faces=Count.Faces+C2D(ReadCH(ObjIn,2))     /* and Points.       */
  91.     Call Seek(ObjIn,Size-2,"C")
  92.    End; Else If Name="PNTS" Then Do
  93.     Count.Points=Count.Points+C2D(ReadCH(ObjIn,2))
  94.     Call Seek(ObjIn,Size-2,"C")
  95.    End; Else If Name="EDGE" Then Do
  96.     Count.Edges=Count.Edges+C2D(ReadCH(ObjIn,2))
  97.     Call Seek(ObjIn,Size-2,"C")
  98.    End; Else If Name="BRS4" Then Do                  /* Brushmap */
  99.     Call Seek(ObjIn,105,"C")
  100.     WrapPath=ReadCH(ObjIn,Size-105)                  /* Grab Filename */
  101.     OldWrapPath=WrapPath
  102.     If Index(WrapPath,":")=0 Then
  103.      WrapPath=Path||WrapPath
  104.      LineBuffer=LineBuffer||" Brush: "||ParseILBM()||'0A'x
  105.    End; Else
  106.     Call Seek(ObjIn,Size,"C")
  107.  
  108.  End
  109. Return TotalSize
  110.  
  111. ParseILBM:
  112.  Call Close(ILBMIn)
  113.  If Open(ILBMIn, WrapPath, "R")=0 Then
  114.   Return OldWrapPath||" does not exist."
  115.  CSize=8
  116.  Buf=ReadCH(ILBMIn,12)
  117.  If Left(Buf,4)~="FORM" Then
  118.   Return OldWrapPath||" is not an IFF file."
  119.  Size=C2D(SubStr(Buf,5,4))
  120.  If Right(Buf,4)~="ILBM" Then
  121.   Return OldWrapPath||" is not an IFF ILBM file."
  122.  Do Until Size<=CSize
  123.   Buffer=ReadCH(ILBMIn,8)
  124.   HunkName=Left(Buffer,4)
  125.   HunkSize=C2D(Right(Buffer,4))
  126.   HunkSize=HunkSize
  127.   CSize=CSize+HunkSize+8+BitTst(HunkSize,0)
  128.   HunkData=ReadCH(ILBMIn,HunkSize+BitTst(HunkSize,0))
  129.   If HunkName="BMHD" Then Do
  130.    Width=C2D(Left(HunkData,2))
  131.    Height=C2D(SubStr(HunkData,3,2))
  132.    Planes=C2D(SubStr(HunkData,9,1))
  133.   End
  134.  End
  135.  Count.Pixels=Count.Pixels+Width*Height
  136. Return OldWrapPath||" ("||Width*Height||" pixels)"
  137.